package phase01.module1.code;

import java.util.Scanner;

/**
 * 1. 编程题 提示用户输入年月日信息，判断这一天是这一年中的第几天并打印。<br>
 * 没有使用java.util.Date日期，而是使用了模块一老师讲解的if...else if..else...的应用。
 * 除2月以外，其余个月天数固定，二月天数取决于输入年份是否为闰年
 */
public class DayOfYear {
    /**
     * <b>判断某个年份是否是闰年：</b><br>
     * <ol>
     *     <li>普通年份能被4整除，且不能被100整除的，是闰年。（如2004年就是闰年）。</li>
     *     <li>世纪年份能被400整除的是闰年。（如2000年是闰年，1900年不是闰年）。</li>
     *     <li>对于数值很大的年份，这年如果能被3200整除，并且还能被172800整除的才是闰年。如172800年是闰年，86400年不是闰年（因为虽然能整除3200，但不能整除172800）。</li>
     * </ol>
     * @param year 待判断是否是闰年的年份
     * @return 是闰年返回true，否则返回false
     */
    private static boolean isLeapYear(int year) {
        if (year > 172800 * 2) {
            return (year % 172800 == 0 && year % 3200 == 0);
        } else if (year % 100 == 0) {
            return (year % 400 == 0);
        } else {
            return (year % 4 == 0);
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份：");
        int year = scanner.nextInt();
        System.out.print("请输入月份：");
        int month = scanner.nextInt();
        System.out.print("请输入天：");
        int day = scanner.nextInt();
        int dayOfYear = 0;
        for (int i = 1; i < month; i++) {
            if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
                dayOfYear += 31;
            } else if (i == 4 || i == 6 || i == 9 || i == 11) {
                dayOfYear += 30;
            } else {
                if (isLeapYear(year)) {
                    dayOfYear += 29;
                } else {
                    dayOfYear += 28;
                }
            }
        }
        dayOfYear += day;
        System.out.println(dayOfYear);
    }
}
